Computer systems organize data sources in a variety of ways. For example, data can be organized as a relational database, as a hierarchical database, as a flat file, as a spreadsheet, etc. Application programs, in general, can only access data sources with organizations and implementations that the developers of the applications program were aware of at the time of development. Thus, these applications not only cannot access other data sources, but also may not be able to access revisions to these data sources. Applications thus need to be customized to organizations and implementations of the particular data source whose data is to be used by the application.
The customization of applications can be very expensive, time-consuming, and problematic for both developers of the applications and suppliers of the data sources. A developer would need to modify, test, and redistribute the application for each new data source. However, a supplier of a data source with a new organization may find it virtually impossible to survive if no application can access the new data source. If a supplier of a data source uses a new organization, then existing applications cannot access that data source. Thus, such suppliers are at a competitive disadvantage to other suppliers who provide data sources in an organization for which the applications have been customized. Although the new organization may be superior to the existing organization, it may thus fail to gain wide acceptance.